创建时间: | 2019/1/25 9:12 |
来源: | https://www.jianshu.com/p/6d76e57c7598 |
开发环境:
...
<userTask id="task2" name="审批2 ${user}" activiti:assignee="${user}">
<extensionElements>
<activiti:taskListener event="create" delegateExpression="${createTaskListener}">
<activiti:field name="msg">
<activiti:string><![CDATA[创建 Task]]></activiti:string>
</activiti:field>
</activiti:taskListener>
<activiti:taskListener event="create" delegateExpression="${completeTaskListener}">
<activiti:field name="msg">
<activiti:string><![CDATA[完成 Task]]></activiti:string>
</activiti:field>
</activiti:taskListener>
<modeler:activiti-idm-initiator xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-initiator>
</extensionElements>
<multiInstanceLoopCharacteristics isSequential="false"
activiti:collection="${userService.getUsers()}"
activiti:elementVariable="user">
</multiInstanceLoopCharacteristics>
</userTask>
...
相关参数说明如下:
activiti:collection="${userService.getUsers()}"
为使用启动时传入的服务获取会签用户集合activiti:elementVariable="user"
为集合中的用户定义的变量,代表单个用户isSequential="false"
取值为 true 时为顺签,false 时为并签<userTask id="task2" name="审批2 ${user}" activiti:assignee="${user}">
配置中的activiti:assignee="${user}"
为引用集合中的用户定义的变量,使用集合中用户设置处理人// 构造参数
Map<String, Object> startVars = new HashMap<>();
startVars.put("completeTaskListener", completeTaskListener);
// 设置启动任务创建监听
startVars.put("createTaskListener", createTaskListener);
// 添加服务 ,userService 为注入的服务,用于返回用户信息
startVars.put("userService", userService);
startVars.put("pass", true);
// 使用流程KEY进行启动
ProcessInstance pi = runtimeService.startProcessInstanceByKey("p4", startVars);
UserService
@Service
public class UserService implements Serializable {
/**
* 获取环节单一审批人,生产使用应该从数据库配置表中获取
* @param taskKey
* @return
*/
public String getUser(String taskKey) {
if (taskKey.equals("task1")) {
return "u2";
} else if (taskKey.equals("task2")) {
return "u3";
}
return "u1";
}
/**
* 获取集合用户,生产使用应该从数据库配置表中获取
* @return
*/
public List<String> getUsers() {
List<String> listUser = new ArrayList<>();
listUser.add("manager1");
listUser.add("manager2");
listUser.add("manager3");
listUser.add("manager4");
return listUser;
}
}
getUsers()
方法用于获取集合用户,提供给会签任务分配用户使用
未完待续...